package com.xj.algorithm.leetcode;

/**
 * 反转字符串中的单词 III
 */
public class L557_反转字符串中的每个单词 {

    /**
     * 给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。
     * <p>
     * 示例 1:
     * <p>
     * 输入: "Let's take LeetCode contest"
     * 输出: "s'teL ekat edoCteeL tsetnoc" 
     * 注意：在字符串中，每个单词由单个空格分隔，并且字符串中不会有任何额外的空格。
     */
    public static void main(String[] args) {
        System.out.println(reverseWords("Let's take LeetCode contest"));
        System.out.println(reverseWordsOffice("Let's take LeetCode contest"));
    }

    //自己的解法：逐个单词反转，前后指针交换顺序
    public static String reverseWords(String s) {
        String[] arr = s.split(" ");
        int length = arr.length;

        String res = "";
        for (int i = 0; i < length; i++) {
            String tmp = arr[i];
            char[] cArr = tmp.toCharArray();
            int len = cArr.length - 1;
            int index = 0;
            while (index < len) {
                char c = cArr[index];
                cArr[index] = cArr[len];
                cArr[len] = c;

                index++;
                len--;
            }
            res = res + new String(cArr) + " ";
        }
        return res.substring(0, s.length());
    }

    //官方解法：使用stringbuffer的reverse函数
    public static String reverseWordsOffice(String s) {
        String words[] = s.split(" ");
        StringBuilder res = new StringBuilder();
        for (String word : words) {
            res.append(new StringBuffer(word).reverse().toString() + " ");
        }
        return res.toString().trim();
    }


}
